package com.authoritydemo.controller;
import com.authoritydemo.dto.ResetPasswordDTO;
import com.authoritydemo.entity.Users;
import com.authoritydemo.service.UsersService;
import com.authoritydemo.vo.UserSimpleVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import jakarta.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.ui.Model;

//@RestController
@Controller
@RequestMapping("/api/admin")
public class AdminController {

    @Autowired
    private UsersService usersService;

    /**
     * 【存在垂直越权漏洞】获取所有用户列表
     * - 只有管理员应该能访问
     * - 当前无角色校验 → 普通用户也能访问
     */
    @GetMapping("/users")
    public Map<String, Object> getAllUsers(HttpSession session) {
        Map<String, Object> result = new HashMap<>();

        // 1. 登录校验
        Users currentUser = (Users) session.getAttribute("user");
        if (currentUser == null) {
            result.put("code", 401);
            result.put("message", "未登录");
            return result;
        }

        // 2. 【存在垂直越权漏洞】未校验当前用户是否为管理员
        // ✅【修复建议】取消下面注释可修复漏洞

//        if (!"ADMIN".equals(currentUser.getRole())) {
//            result.put("code", 403);
//            result.put("message", "无权访问");
//            return result;
//        }


        // 3. 查询所有用户
        List<Users> userList = usersService.list();
        List<UserSimpleVO> voList = new ArrayList<>();


        for (Users user : userList) {
            UserSimpleVO vo = new UserSimpleVO();
            vo.setId(user.getId());
            vo.setUsername(user.getUsername());
            vo.setNickname(user.getNickname());
            vo.setEmail(user.getEmail());
            voList.add(vo);
        }

        result.put("code", 200);
        result.put("data", voList);
        result.put("message", "success");

        return result;
    }

    /**
     * 显示用户列表页面（HTML 页面）
     */
    @GetMapping("/user/list/page")
    public String showUserListPage(HttpSession session, Model model) {
        Users currentUser = (Users) session.getAttribute("user");
        if (currentUser == null) {
            return "login";
        }

        // ✅【修复】只允许管理员访问
//        if (!"ADMIN".equals(currentUser.getRole())) {
//            return "forbidden"; // 或跳转到无权限页面 forbidden.html
//        }

        // 查询所有用户
        List<Users> userList = usersService.list();
        List<UserSimpleVO> voList = new ArrayList<>();

        for (Users user : userList) {
            UserSimpleVO vo = new UserSimpleVO();
            vo.setId(user.getId());
            vo.setUsername(user.getUsername());
            vo.setNickname(user.getNickname());
            vo.setEmail(user.getEmail());
            voList.add(vo);
        }

        model.addAttribute("users", voList);
        return "user-list"; // 对应 templates/user-list.html
    }

    /**
     * 【存在垂直越权漏洞】重置任意用户密码
     * - 只有管理员应该能操作
     * - 当前无角色校验 → 普通用户也能修改他人密码
     */
    /**
     * 显示重置密码页面
     */
    @GetMapping("/reset-password")
    public String showResetPasswordPage(HttpSession session, Model model) {
        Users currentUser = (Users) session.getAttribute("user");
        if (currentUser == null) {
            return "login";
        }
//        // ✅【修复】只允许管理员访问
//        if (!"ADMIN".equals(currentUser.getRole())) {
//            return "forbidden";// 或跳转到无权限页面 forbidden.html
//        }

        // 【存在垂直越权漏洞】普通用户也可以访问该页面
        return "reset-password";
    }

    /**
     * 处理表单提交：重置用户密码
     */
    @PostMapping("/reset-password")
    public String handleResetPassword(
            @RequestParam Long userId,
            @RequestParam String newPassword,
            HttpSession session,
            Model model) {

        Users currentUser = (Users) session.getAttribute("user");
        if (currentUser == null) {
            return "login";
        }
        // ✅【修复】只允许管理员访问
//        if (!"ADMIN".equals(currentUser.getRole())) {
//            return "forbidden"; // 或跳转到无权限页面 forbidden.html
//        }


        Users targetUser = usersService.getById(userId);
        if (targetUser == null) {
            model.addAttribute("error", "用户不存在");
            return "reset-password";
        }

        // 【存在垂直越权漏洞】未校验当前用户是否有权限
        targetUser.setPassword(newPassword);
        usersService.updateById(targetUser);

        model.addAttribute("success", "密码已成功重置");
        return "reset-password";
    }
}